package com.htjc.integral.conversion.inner.service.impl;

import java.sql.Timestamp;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONObject;
import com.htjc.integral.conversion.inner.entity.EcBpInnerSystemParam;
import com.htjc.integral.conversion.inner.entity.EcBpPowerUserIncome;
import com.htjc.integral.conversion.inner.mapper.InvokeConsMapper;
import com.htjc.integral.conversion.inner.service.InvokeBuildService;
import com.htjc.integral.conversion.inner.service.InvokeConsService;
import com.htjc.integral.conversion.inner.util.BeanUtil;
import com.htjc.integral.conversion.inner.util.RequestUtils;
import com.htjc.integral.conversion.inner.util.UUIDUtil;
import com.htjc.integral.conversion.inner.util.enums.ParamsEnum;

import lombok.extern.slf4j.Slf4j;

@Slf4j(topic = "jfLog")
@Service
public class InvokeConsServiceImpl implements InvokeConsService {

	@Autowired
	private InvokeConsMapper invokeConsMapper;
	@Autowired
	private InvokeBuildService invokeBuildService;
	/**
	 * 查询内网积分余额
	 */
	@Override
	public String queryConsBalance(JSONObject jsonObject) throws Exception {
		// TODO Auto-generated method stub
		log.info("---------户号余额查询---------");
		String result = null;
		try {
			
			log.info("---------户号余额查询---------");
			String provinceCode = jsonObject.getString("ORGNO");
			log.info("---------户号余额查询---------,请求网省={}", provinceCode);
			EcBpInnerSystemParam proConfig = invokeConsMapper.queryConfig(ParamsEnum.PRO_TYPE_PREFIX.getParamCodePrefix()+provinceCode);// 网省配置确定哪个网省为自建网省，value值采用11102,12101,13103...的形式保存
			// 配置为空时默认走统一的户号体系  判断是否是自建网省
			if (proConfig.getParamValue() != null && ParamsEnum.BUILD_PROVINCE.getParamValue().equalsIgnoreCase(proConfig.getParamValue())) {
				log.info("---------户号余额查询---------,请求网省={},该网省为自建网省", provinceCode);
				// 自建积分预留
				
				/*不通过反射调用
				 * InvokeBuildService buildService = BeanUtil.getBean(InvokeBuildService.class);
				result = buildService.doInvoke(jsonObject);*/
				result = invokeBuildService.queryIntegral(jsonObject);
				return result;
			}
			/*EcBpInnerSystemParam consConfig = invokeConsMapper.queryConfig(provinceCode);// 户号-积分划转接口地址
			log.info("---------户号余额划转---------,目标端服务={},目标端地址={}", consConfig.getParamCode(),
					consConfig.getParamValue());
			if ((consConfig.getParamCode() == null || "".equals(consConfig.getParamCode()))
					|| (consConfig.getParamValue() == null || "".equals(consConfig.getParamValue()))) {
				log.error("---------户号余额划转异常---------,目标端服务或地址为空");
				throw new RuntimeException("---------户号划转异常---------,目标端服务或地址为空");
			}
			// 户号-积分划转接口地址
			result = RequestUtils.sendPost(consConfig.getParamValue(), jsonObject.toString());
			log.info("---------户号余额划转---------,目标端请求完成");*/
			
		} catch (Exception e) {
			// TODO: handle exception
			log.error("查询内网积分余额异常 错误信息={}",e.getMessage());
		}
		return result;
	}
	
	
	@Override
	public String addConsBalance(JSONObject jsonObject) throws Exception {
		log.info("---------户号余额流入---------");
		String incomeType = jsonObject.getString("INCOME_TYPE");
		String provinceCode = jsonObject.getString("PROVINCE_CODE");
		String consNo = jsonObject.getString("POWER_USER_NO");
		String orgNo = jsonObject.getString("ORG_NO");

		EcBpPowerUserIncome ecBpPowerUserIncome = new EcBpPowerUserIncome();

		ecBpPowerUserIncome.setIncomeId(UUIDUtil.getUUID());
		ecBpPowerUserIncome.setPowerUserNo(consNo);
		ecBpPowerUserIncome.setProvinceId(provinceCode);
		ecBpPowerUserIncome.setPowerunitCode(orgNo);
		ecBpPowerUserIncome.setIncomeIntegral(jsonObject.getBigDecimal("INCOME_NUM"));
		ecBpPowerUserIncome.setIncomeType(incomeType);
		ecBpPowerUserIncome.setCreateTime(new Timestamp(System.currentTimeMillis()));
		ecBpPowerUserIncome.setBusinessType(jsonObject.getString("INCOME_SOURCE"));
		ecBpPowerUserIncome.setBusinessId(jsonObject.getString("ACCOUNT_MAIN_ID"));
		ecBpPowerUserIncome.setIncomeStatus("01");
		// 记录明细数据
		log.info("---------户号余额流入---------,明细数据落库中");
		invokeConsMapper.insertConsUserIncome(ecBpPowerUserIncome);
		log.info("---------户号余额流入---------,明细数据落库完成");
		// 获取配置项
		EcBpInnerSystemParam config = invokeConsMapper.queryConfig("HOUSE_URL_ADD_CONS_BALANCE");
		log.info("---------户号余额流入---------,目标端服务={},目标端地址={}", config.getParamCode(), config.getParamValue());
		if ((config.getParamCode() == null || "".equals(config.getParamCode()))
				|| (config.getParamValue() == null || "".equals(config.getParamValue()))) {
			log.error("---------户号余额流入异常---------,目标端服务或地址为空");
			throw new RuntimeException("---------户号流入异常---------,目标端服务或地址为空");
		}
		// 户号-积分流入接口地址
		String result = RequestUtils.sendPost(config.getParamValue(), jsonObject.toString());
		log.info("---------户号余额流入---------,目标端请求完成");
		return result;
	}

	@Override
	public String transferConsBalance(JSONObject jsonObject) throws Exception {

		String result = null;
		try {

			log.info("---------户号余额划转---------");
			String provinceCode = jsonObject.getString("ORGNO");
			log.info("---------户号余额划转---------,请求网省={}", provinceCode);
			EcBpInnerSystemParam proConfig = invokeConsMapper.queryConfig(ParamsEnum.PRO_TYPE_PREFIX.getParamCodePrefix()+provinceCode);// 网省配置确定哪个网省为自建网省，value值采用11102,12101,13103...的形式保存
			// 配置为空时默认走统一的户号体系  判断是否是自建网省
			if (proConfig.getParamValue() != null && ParamsEnum.BUILD_PROVINCE.getParamValue().equalsIgnoreCase(proConfig.getParamValue())) {
				log.info("---------户号余额划转---------,请求网省={},该网省为自建网省", provinceCode);
				// 自建积分预留
				InvokeBuildService buildService = BeanUtil.getBean(InvokeBuildService.class);
				result = buildService.doInvoke(jsonObject);
				return result;
			}
			EcBpInnerSystemParam consConfig = invokeConsMapper.queryConfig(provinceCode);// 户号-积分划转接口地址
			log.info("---------户号余额划转---------,目标端服务={},目标端地址={}", consConfig.getParamCode(),
					consConfig.getParamValue());
			if ((consConfig.getParamCode() == null || "".equals(consConfig.getParamCode()))
					|| (consConfig.getParamValue() == null || "".equals(consConfig.getParamValue()))) {
				log.error("---------户号余额划转异常---------,目标端服务或地址为空");
				throw new RuntimeException("---------户号划转异常---------,目标端服务或地址为空");
			}
			// 户号-积分划转接口地址
			result = RequestUtils.sendPost(consConfig.getParamValue(), jsonObject.toString());
			log.info("---------户号余额划转---------,目标端请求完成");

		} catch (Exception e) {
			log.error("户号余额划转异常 错误信息{}", e.getMessage());
		}
		return result;
	}

	

}
